Langkah ini adalah langkah yang wajib dilakukan agar fungsi dari EBImage itu dapat diakses dengan R Studio.
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
## Bioconductor version '3.10' is out-of-date; the current release version '3.12'
## is available with R version '4.0'; see https://bioconductor.org/install
BiocManager::install("EBImage")
## Bioconductor version 3.10 (BiocManager 1.30.12), R 3.6.2 (2019-12-12)
## Installing package(s) 'EBImage'
## package 'EBImage' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\DELL\AppData\Local\Temp\Rtmp2zBZYc\downloaded_packages
## Installation paths not writeable, unable to update packages
## path: C:/Program Files/R/R-3.6.2/library
## packages:
## boot, class, cluster, codetools, KernSmooth, lattice, MASS, Matrix, mgcv,
## nlme, nnet, spatial, survival
#set lokasi kerja
setwd("C:/Users/DELL/Documents/R/DUA/EBImage Advance/")
Memanggil package yang sudah diinstall di tahap 1, yaitu package EBImage.
#memanggi package
library(EBImage)
Disini kita perlu melakukan assign (import)pada fungsi readImage dengan judul photo yang sudah ditaruh di folder set kerja dan memberinya nama misal Greenview.
Image <- readImage('Greenview.jpg')
Disini kita bisa melakukan operasi-operasi dasar, seperti menampilkan gambar, histsogram gambar ,writing.
img = readImage("Greenview.jpg")
display(img, method="browser")
display(img)
colorMat = matrix(rep(c("red","green", "#0000ff"), 25), 5, 5)
colorImg = Image(colorMat)
colorImg
## Image
## colorMode : Color
## storage.mode : double
## dim : 5 5 3
## frames.total : 3
## frames.render: 1
##
## imageData(object)[1:5,1:5,1]
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 0 0 1 0
## [2,] 0 1 0 0 1
## [3,] 0 0 1 0 0
## [4,] 1 0 0 1 0
## [5,] 0 1 0 0 1
display(colorImg, interpolate=FALSE)
nuc = readImage(system.file("images", "nuclei.tif", package="EBImage"))
display(nuc, method = "raster", all = TRUE)
nuc = readImage(system.file("images", "nuclei.tif", package="EBImage"))
display(nuc, method = "raster")
## Only the first frame of the image stack is displayed.
## To display all frames use 'all = TRUE'.
Histogram gamabr adalah suatu grafik yang akan menahistmpilkan banyak hal bisa berupa kecerahan (brightness), kontas (contrast), warna (color) dari sebuah gambar.
hist(Image)
Disini kita bisa menampilkan sifat gambar berupa matriks.
print(img)
## Image
## colorMode : Color
## storage.mode : double
## dim : 2560 1440 3
## frames.total : 3
## frames.render: 1
##
## imageData(object)[1:5,1:6,1]
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 0.1568627 0.1568627 0.1568627 0.1607843 0.1607843 0.1607843
## [2,] 0.1568627 0.1568627 0.1568627 0.1607843 0.1607843 0.1607843
## [3,] 0.1568627 0.1568627 0.1568627 0.1607843 0.1607843 0.1607843
## [4,] 0.1568627 0.1568627 0.1568627 0.1607843 0.1607843 0.1607843
## [5,] 0.1568627 0.1568627 0.1568627 0.1607843 0.1607843 0.1607843
Disini kita bisa menambahkan text pada gambar kita. Lokasi text bisa disesuaikan posisinya menggunakan koordinat x,y.
display(img)
text(x = 750, y = 6, label = "GO GREEN!", adj = c(0,1), col = "white", cex = 2)
text(x = 749, y = 3, label = "GO GREEN!", adj = c(0,1), col = "navy", cex = 2)
Disini kita bisa menggunakan fungsi yang ada di dalam library EBImage untuk menyimpan maupun memproses gambar. Semua fungsi yang ada di dalam EBImage dapat dipanggil berupa matrix dan array.
str(Image)
## Formal class 'Image' [package "EBImage"] with 2 slots
## ..@ .Data : num [1:2560, 1:1440, 1:3] 0.157 0.157 0.157 0.157 0.157 ...
## ..@ colormode: int 2
Kita juga bisa menampilkan gamber tersebut berupa Array
dim(Image)
## [1] 2560 1440 3
Disini kita bisa menampilkan data-data penting dari gambar kita. Untuk menampilkannya senditi yaitu dengan menuliskan nama objek gambarnya saja
Image
## Image
## colorMode : Color
## storage.mode : double
## dim : 2560 1440 3
## frames.total : 3
## frames.render: 1
##
## imageData(object)[1:5,1:6,1]
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 0.1568627 0.1568627 0.1568627 0.1607843 0.1607843 0.1607843
## [2,] 0.1568627 0.1568627 0.1568627 0.1607843 0.1607843 0.1607843
## [3,] 0.1568627 0.1568627 0.1568627 0.1607843 0.1607843 0.1607843
## [4,] 0.1568627 0.1568627 0.1568627 0.1607843 0.1607843 0.1607843
## [5,] 0.1568627 0.1568627 0.1568627 0.1607843 0.1607843 0.1607843
colorMode(Image) <- Grayscale
display(Image)
## Only the first frame of the image stack is displayed.
## To display all frames use 'all = TRUE'.
display(colorImg, interpolate=FALSE)
img_neg = max(img) - img
display( img_neg )
img_comb = combine(
img,
img + 0.4,
img * 3,
img ^ 0.5
)
display(img_comb, all=TRUE)
img_t = transpose(img)
display( img_t )
Translate adalah dimana kita memindahkan bidang gambar dengan vektor dua dimensi yang sudah ditentukan, sehingga piksel yang masuk ke dalam area gambar disetel ke latar belakang dan piksel yang berada di area luar gambar dipotong.
img_translate = translate(img, c(150,-70))
display(img_translate)
Imagetr <- translate(rotate(Image, 45), c(50, 0))
display(Imagetr)
## Only the first frame of the image stack is displayed.
## To display all frames use 'all = TRUE'.
Disini kita bisa melakukan resize pada gambar kita
img_resize = resize(img, w=450, h=450)
display(img_resize )
Disini kita juga bisa melakukan pencerminan terhadap gambar kita
img_flip = flip(img)
img_flop = flop(img)
display(combine(img_flip, img_flop), all=TRUE)
Disini kita dapat memberikan sebuah filter pada gambar kita.
fhi = matrix(1, nrow = 3, ncol = 3)
fhi[2, 2] = -8
img_fhi = filter2(img, fhi)
display(img_fhi)
w = makeBrush(size=31, shape='gaussian', sigma=5)
plot(w[nrow(w)+1/2, ], ylab="2", xlab="", cex=0.7)
img_flo = filter2(img, w)
display(img_flo)
l = length(img)
n = l/10
pixels = sample(l, n)
img_noisy = img
img_noisy[pixels] = runif(n, min=0, max=1)
display(img_noisy)
shapes = readImage(system.file('images', 'shapes.png', package = 'EBImage'))
logo = shapes[110:512,1:130]
display(logo)
kern = makeBrush(5, shape='diamond')
display(kern, interpolate=FALSE)
logo_erode= erode(logo, kern)
logo_dilate = dilate(logo, kern)
display(combine(logo_erode, logo_dilate), all=TRUE)
Disini kita bisa membuat gambar inti dan badan sel. Untuk memvisualisasikan sel, dengan melapisi gambar-gambar ini sebagai saluran hijau dan biru dari gambar berwarna palsu.
nuc = readImage(system.file('images', 'nuclei.tif', package='EBImage'))
cel = readImage(system.file('images', 'cells.tif', package='EBImage'))
cells = rgbImage(green=1.5*cel, blue=nuc)
display(cells, all = TRUE)
Hal pertama yang harus dilakukan adalah segmentasi menggunakan thresh, fillHull, bwlabel dan opening.
nmask = thresh(nuc, w=10, h=10, offset=0.05)
nmask = opening(nmask, makeBrush(5, shape='disc'))
nmask = fillHull(nmask)
nmask = bwlabel(nmask)
display(nmask, all=TRUE)
Selanjutnya, kita gunakan inti tersegmentasi sebagai benih dalam segmentasi Voronoi dan sitoplasma
ctmask = opening(cel>0.1, makeBrush(5, shape='disc'))
cmask = propagate(cel, seeds=nmask, mask=ctmask)
display(ctmask, all=TRUE)
Terakhir, kita visualisasikan segmentasi pada objek, menggunakan paintObject
segmented = paintObjects(cmask, cells, col='#ff00ff')
segmented = paintObjects(nmask, segmented, col='#ffff00')
display(segmented, all=TRUE)